﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Calendario : JavaScriptCodeBehind.UserControl
{
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.hfDiaInicial.Value == string.Empty)
        {
            this.DataInicial = DateTime.Now;
        }

        this.preencherArrayDiasSelecionados();

        this.tdMesAnterior.Attributes["class"] = hfStyleMesAnterior.Value;
        this.tdMesPosterior.Attributes["class"] = hfStyleMesPosterior.Value;
        this.tdTitulo.Attributes["class"] = hfStyleTitulo.Value;

        this.tdDom.Attributes["class"] = hfStyleCabecalho.Value;
        this.tdSeg.Attributes["class"] = hfStyleCabecalho.Value;
        this.tdTer.Attributes["class"] = hfStyleCabecalho.Value;
        this.tdQua.Attributes["class"] = hfStyleCabecalho.Value;
        this.tdQui.Attributes["class"] = hfStyleCabecalho.Value;
        this.tdSex.Attributes["class"] = hfStyleCabecalho.Value;
        this.tdSab.Attributes["class"] = hfStyleCabecalho.Value;
        
        this.AddControlReference(tblCalendario);
        this.AddControlReference(hfStyleFimDeSemana);
        this.AddControlReference(hfStyleDiaNormal);
        this.AddControlReference(hfStyleDiaAtual);
        this.AddControlReference(hfStyleDiaSelecionado);
        this.AddControlReference(hfStyleCabecalho);
        this.AddControlReference(hfStyleEditarAno);
        this.AddControlReference(hfAnoInicial);
        this.AddControlReference(hfMesInicial);
        this.AddControlReference(hfDiaInicial);
        this.AddControlReference(hfDiasSelecionados);

    }

    public string styleFimDeSemana
    {
        set{ this.hfStyleFimDeSemana.Value = value;}
        get{ return this.hfStyleFimDeSemana.Value;}
    }

    public string styleDiaNormal
    {
        set { this.hfStyleDiaNormal.Value = value; }
        get { return this.hfStyleDiaNormal.Value; }
    }

    public string styleDiaAtual
    {
        set { this.hfStyleDiaAtual.Value = value; }
        get { return this.hfStyleDiaAtual.Value; }
    }

    public string styleDiaSelecionado
    {
        set { this.hfStyleDiaSelecionado.Value = value; }
        get { return this.hfStyleDiaSelecionado.Value; }
    }

    public string styleCabecalho
    {
        set { this.hfStyleCabecalho.Value = value; }
        get { return this.hfStyleCabecalho.Value; }
    }

    public string styleMesAnterior
    {
        set { this.hfStyleMesAnterior.Value = value; }
        get { return this.hfStyleMesAnterior.Value; }
    }

    public string styleMesPosterior
    {
        set { this.hfStyleMesPosterior.Value = value; }
        get { return this.hfStyleMesPosterior.Value; }
    }

    public string styleTitulo
    {
        set { this.hfStyleTitulo.Value = value; }
        get { return this.hfStyleTitulo.Value; }
    }

    public string styleEditarAno
    {
        set { this.hfStyleEditarAno.Value = value; }
        get { return this.hfStyleEditarAno.Value; }
    }
   
    public DateTime DataInicial
    {
        set 
        { 
            this.hfAnoInicial.Value = value.Year.ToString();
            this.hfMesInicial.Value = (value.Month - 1).ToString();
            this.hfDiaInicial.Value = value.Day.ToString();
        }
        get 
        { 
            return new DateTime(int.Parse(this.hfAnoInicial.Value), 
                                int.Parse(this.hfMesInicial.Value)+1,
                                int.Parse(this.hfDiaInicial.Value));
        }
    }

    private List<DateTime> diasSelecionados = new List<DateTime>();

    public DateTime[] DiasSelecionados
    {
        get
        {
            DateTime[] a = new DateTime[this.diasSelecionados.Count];

            for (int i = 0; i < this.diasSelecionados.Count; i++)
            {
                a[i] = (DateTime)this.diasSelecionados[i];
            };

            return a;
        }
    }

    public void MarcarData(DateTime data)
    {
        int i = this.diasSelecionados.IndexOf(data);
        if (i < 0)
        {
            this.diasSelecionados.Add(data);
            this.atualizarHfDiasSelecionados();
        }
    }

    public void DesmarcarData(DateTime data)
    {
        int i = this.diasSelecionados.IndexOf(data);
        if (i >= 0)
        {
            this.diasSelecionados.RemoveAt(i);
            this.atualizarHfDiasSelecionados();
        }
    }

    public void DesmarcarTodasDatas()
    {
        this.diasSelecionados.Clear();
        this.atualizarHfDiasSelecionados();
    }

    private void atualizarHfDiasSelecionados()
    {
        this.diasSelecionados.Sort();
        this.hfDiasSelecionados.Value = string.Empty;
        for (int i = 0; i < this.diasSelecionados.Count; i++)
        {
            DateTime data2 = this.diasSelecionados[i];
            this.hfDiasSelecionados.Value += string.Format("{0:d4}/{1:d2}/{2:d2}", data2.Year, data2.Month - 1, data2.Day);
            if (i < this.DiasSelecionados.Length - 1)
                this.hfDiasSelecionados.Value += ",";
        }
    }

    private void preencherArrayDiasSelecionados()
    {
        if (this.hfDiasSelecionados.Value.Trim() != string.Empty)
        {
            if (this.diasSelecionados != null)
            {
                this.diasSelecionados.Clear();
                string[] a = this.hfDiasSelecionados.Value.ToString().Split(',');
                
                for (int i = 0; i < a.Length; i++)
                {
                    string[] datePart = a[i].Split('/');
                    this.diasSelecionados.Add(new DateTime(int.Parse(datePart[0]), int.Parse(datePart[1]) + 1, int.Parse(datePart[2])));
                }

                this.diasSelecionados.Sort();

            }
        }
    }


}